#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5,V=1e6,M=1<<21|5,INF=1e9;
multiset<int>Sl[V],Sr[V];
int n,m,ql,qr;
namespace ST{
	int tag[V<<2],mx[V<<2];
	#define k1 (k<<1)
	#define k2 (k<<1|1)
	#define mid ((l+r)>>1)
	#define ls k1,l,mid
	#define rs k2,mid+1,r
	inline void up(int k){mx[k]=max(mx[k1],mx[k2]);}
	inline void add(int k,int v){mx[k]+=v,tag[k]+=v;}
	inline void push(int k){if(tag[k]) add(k1,tag[k]),add(k2,tag[k]),tag[k]=0;}
	inline void upd(int L,int R,int v,int k=1,int l=1,int r=V){
		if(L<=l&&R>=r) return add(k,v);
		push(k);
		if(L<=mid) upd(L,R,v,ls);
		if(R>mid) upd(L,R,v,rs);
		up(k);
	}
	inline int findl(int k=1,int l=1,int r=V){
		if(mx[k]!=n) return -1;
		if(l==r) return l;
		push(k);
		int ret=findl(ls);
		return ~ret?ret:findl(rs);
	}
	inline int findr(int k=1,int l=1,int r=V){
		if(mx[k]!=n) return -1;
		if(l==r) return l;
		push(k);
		int ret=findr(rs);
		return ~ret?ret:findr(ls);
	}
}
struct Node{int lv,rv,ans;};
inline Node operator+(Node a,Node b){
	Node c;
	c.lv=min(a.lv,b.lv),c.rv=min(a.rv,b.rv);
	c.ans=min({a.ans,b.ans,a.lv+b.rv});
	return c;
}
namespace ZKW{
	const int K=1<<20;
	Node t[M];
	inline void init(){
		for(int i=0;i<M;++i) t[i]={INF,INF,INF};
	}
	inline void upd(int x,int v1,int v2){
		for(t[x+K]={v1,v2,INF},x+=K;x>>=1;) t[x]=t[x<<1]+t[x<<1|1];
	}
}
inline int getl(int x){return Sl[x].size()?(*Sl[x].begin())-x+1:INF;}
inline int getr(int x){return Sr[x].size()?x-*(--Sr[x].end())+1:INF;}
inline int Getl(int x){return !Sl[x].size()?INF:(*Sl[x].begin())+1;}
inline int Getr(int x){return !Sr[x].size()?INF:-(*(--Sr[x].end()));}
long long sum;
inline void upd(int l,int r,int v){
	if(v==1) Sl[l].insert(r),Sr[r].insert(l);
	else Sl[l].erase(Sl[l].find(r)),Sr[r].erase(Sr[r].find(l));
	n+=v,sum+=(r-l+1)*v,ZKW::upd(l,Getr(l),Getl(l)),ZKW::upd(r,Getr(r),Getl(r)),ST::upd(l,r,v);
}
inline int ask(){
	if(n==1) return sum;
	if(ST::mx[1]==n) return ql=ST::findl(),qr=ST::findr(),getl(ql)+getr(qr)-(qr-ql+1);
	else return ZKW::t[1].ans;
}
signed main(){
	freopen("stone.in","r",stdin);
	freopen("stone.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin>>m,ZKW::init();
	char opt;
	for(int l,r,i=1;i<=m;++i)
		cin>>opt>>l>>r,upd(l,--r,opt=='A'?1:-1),cout<<ask()<<"\n";
}